function MEL=mfcc(num,s,n,W)

%Fecha 14.11.08
%Syntax:        M=mfcc(num,s,n,W);

%Calcula y devuelve los coeficientes de una señal de voz
%s:     es la señal de entrada
%num:   es el número de coeficientes requeridos. 
%Fs:    frecuencia de muestreo
%W:  es el banco de filtros MEL

%Utiliza la función 'melfilter' de Paula Sanz Leon bajo licencia (GNU General Public License v3), 
%disponible en internet libre y gratuito 
%para implemetar el banco triangular de filtros de mel (triangular mel filter bank)



%La longitud de la fft o de la ventana debe ser la misma que la cantidad de
%columnas de la matriz del banco de filtros


%Parametros fijos
%n           =   512;              %Número de puntos de FFT. Debe ser la misma que la usada en la matriz de filtro
%Tf          =   0.032;            %Duración del frame en segundos
%N           =   Fs*Tf;            %Número de muestras por frames. Puede especificarse una constante directamente
%fn  =   20;                       %Número de filtros mel o ventanas
%Ts          =   0.016;            %Paso del frame en segundos
%FrameStep   =   Fs*Ts;            %Paso del Frame en muestras 


fftLength   =   n;
FrameStep   =   fftLength/2;

%a   = 1;
%b   = [1, -0.97];                                       %a y b son
%coeficientes de filtro pasa alto para preenfasis

%lifter      =   1:num;                                  %Elevador del índice del vector
%lifter      =   1+floor((num)/2)*(sin(lifter*pi/num));  %Versión de elevador de seno aumentado. Peso de los coef. 

if mean(abs(s)) > 0.01
        s=s/max(s);       %Normalizacion de amplitud de la señal. Viene normalizada de myVAD.m
end


%Segmentacion de la señal en frames sobrepuestos y calcula los MFCC

MELRAW = computeMelSpectrum(W,FrameStep,s);                 %Matriz con los coefcientes sin normalizacion de la energia

spectr = log10(MELRAW);                                     %se calcula el log de los coeficientes
spectr1= dct(spectr);                                       %obtiene DCT,Transformada de Coseno Discreta
cmnMEL = CMN(spectr1);                                      %Cepstral Mean Normalization
MEL= cmnMEL(2:num+1,:);
